home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / printq.exe / PRINTQ.H < prev    next >
C/C++ Source or Header  |  1993-05-23  |  3KB  |  167 lines

  1. #if !defined(__PRINTQ_H)
  2. #define __PRINTQ_H
  3.  
  4. class PrintJob
  5.     {
  6.     public:
  7.  
  8.         PrintJob(int aPrintSize);
  9.         virtual ~PrintJob();
  10.  
  11.         virtual void reset();
  12.         virtual int getText(char*&);
  13.         virtual void skip(int);
  14.         virtual Boolean complete();
  15.         long amountPrinted()
  16.             {    return pos;    }
  17.         long amountRemaining()
  18.             {    return size-pos; }
  19.  
  20.     protected:
  21.  
  22.         long pos;
  23.         long size;
  24.         int printSize;
  25.     };
  26.  
  27. inline PrintJob::PrintJob(int aPrintSize) :
  28.         pos(0), size(0), printSize(aPrintSize)
  29.     {}
  30.  
  31. inline PrintJob::~PrintJob()
  32.     {}
  33.  
  34. inline void PrintJob::reset()
  35.     { pos = 0; }
  36.  
  37. inline int PrintJob::getText(char*& buf)
  38.     { buf = 0;  return 0; }
  39.  
  40. inline void PrintJob::skip(int n)
  41.     {
  42.     pos += n;
  43.     if(pos > size)
  44.         pos = size;
  45.     }
  46.  
  47. inline Boolean PrintJob::complete()
  48.     { return Boolean(pos >= size); }
  49.  
  50. // ------------------------------------------------------------------
  51.  
  52. const int PQDelta = 4;
  53. const int PQMaxSize = int((65536UL - 16)/sizeof(PrintJob*));
  54.  
  55. class PrintQueue
  56.     {
  57.     public:
  58.  
  59.         PrintQueue();
  60.         virtual ~PrintQueue();
  61.  
  62.         Boolean insert(PrintJob*);
  63.         Boolean kill(PrintJob*);
  64.         void killAll();
  65.         PrintJob* currentJob() const;
  66.         Boolean print();
  67.  
  68.     protected:
  69.  
  70.         virtual int printString(const char*, int) const = 0;
  71.         virtual Boolean printFormFeed() const;
  72.  
  73.         Boolean setJobsSize(int);
  74.  
  75.         PrintJob** jobs;
  76.         int count;
  77.         int limit;
  78.     };
  79.  
  80. inline PrintQueue::PrintQueue() : jobs(0), count(0), limit(0)
  81.     {}
  82.  
  83. inline PrintQueue::~PrintQueue()
  84.     {
  85.     killAll();
  86.     }
  87.  
  88. inline PrintJob* PrintQueue::currentJob() const
  89.     {
  90.     if(count > 0)
  91.         return jobs[0];
  92.     else
  93.         return 0;
  94.     }
  95.  
  96. inline Boolean PrintQueue::printFormFeed() const
  97.     {
  98.     return Boolean(printString("\f",1) == 1);
  99.     }
  100.  
  101. // ------------------------------------------------------------------
  102. // Some standard PrintJobs.
  103.  
  104. // Print a contiguous buffer.
  105.  
  106. class PrintBuffer : public PrintJob
  107.     {
  108.     public:
  109.  
  110.         PrintBuffer(char*, long, int);
  111.         virtual ~PrintBuffer();
  112.  
  113.         virtual int getText(char*&);
  114.  
  115.     protected:
  116.  
  117.         char* buffer;
  118.     };
  119.  
  120. inline PrintBuffer::PrintBuffer(char* aBuffer, long aSize, int aPrintSize) :
  121.         PrintJob(aPrintSize),
  122.         buffer(aBuffer)
  123.     {
  124.     size = aSize;
  125.     }
  126.  
  127. inline PrintBuffer::~PrintBuffer()
  128.     {
  129.     delete [] buffer;
  130.     }
  131.  
  132. inline int PrintBuffer::getText(char*& buf)
  133.     {
  134.     if(complete())
  135.         {
  136.         buf = 0;
  137.         return 0;
  138.         }
  139.     else
  140.         {
  141.         buf = buffer+pos;
  142.         int len = printSize;
  143.         if(pos+len > size)
  144.             len = int(size-pos);
  145.         return len;
  146.         }
  147.     }
  148.  
  149. // Print a file.
  150.  
  151. class PrintFile : public PrintJob
  152.     {
  153.     public:
  154.  
  155.         PrintFile(const char*, int);
  156.         virtual ~PrintFile();
  157.  
  158.         virtual int getText(char*&);
  159.  
  160.     protected:
  161.  
  162.         int handle;
  163.         char* buffer;
  164.     };
  165.  
  166. #endif    // __PRINTQ_H
  167.